import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class Window extends JFrame implements ActionListener{
	private Window LST,TABSIM;
	private	JTextArea Salida = new JTextArea();
	private String nombrearchivo;
	static final long serialVersionUID = 0;
	
	// BArra Salida
	private JMenuBar MOutBarra = new JMenuBar();
	private JMenu MOutput =  new JMenu("Archivo");
	private JMenuItem Mlst = new JMenuItem("Mostrar archivo de listado");
	private JMenuItem Mtabsim = new JMenuItem("Mostrar tabla de simbolos");
	private JMenuItem MCerrar = new JMenuItem("Cerrar");

	Window(String abrir,String fname,boolean menu,String titulo) throws IOException{
		nombrearchivo = fname;
		
		//Aadir barras de scroll a la caja de texto
		JScrollPane barraError = new JScrollPane(Salida,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		add(barraError);

		// Menu ArchivoSalida	
		Mlst.addActionListener(this);	
		Mtabsim.addActionListener(this);		
		MCerrar.addActionListener(this);
		MOutput.add(Mlst);
		MOutput.add(Mtabsim);
		MOutput.addSeparator();
		MOutput.add(MCerrar);
		MOutBarra.add(MOutput);
		if(menu){
			setJMenuBar(MOutBarra);
			setSize(550,700);
		}
		else setSize(550,350);
		setTitle("Ensamblador - " + titulo);
		
		addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent we){
				if(!we.equals(LST) && !we.equals(TABSIM))
					close();
				else dispose();
			}
		});

		// abre archivo de salida
		RandomAccessFile salida = new RandomAccessFile(abrir,"r");
		String linea;
		Salida.setText("");
		while((linea = salida.readLine())!=null)Salida.append(linea+ "\r\n");
		salida.close();
		if(abrir.equals("salida.txt")){
			File del = new File("salida.txt");
			del.delete();
		}
		Salida.setEditable(false);
		Salida.setSelectionStart(0);
		Salida.setSelectionEnd(0);
		setVisible(true);
	}
	public void actionPerformed(ActionEvent e){
		try{
			if(e.getSource() == Mlst){
				if(LST!=null)LST.dispose();
				LST = new Window(nombrearchivo.toLowerCase().replaceAll(".asm", ".lst"),nombrearchivo,false,"Archivo de listado");
			}				
			if(e.getSource() == Mtabsim){
				if(TABSIM!=null)TABSIM.dispose();
				TABSIM = new Window(nombrearchivo.toLowerCase().replaceAll(".asm", ".tabsim"),nombrearchivo,false,"Tabla de simbolos");
			}
			if(e.getSource() == MCerrar) 
				close();
				
		}catch(IOException E){}		
	}	
	public void close(){
		if(TABSIM!=null)TABSIM.dispose();
		if(LST!=null)LST.dispose();	
		dispose();			
	}
}